/*一块金条切成两半，需要花费和长度数值一样的铜板，例如长度为20的金条，不论怎么切，都要花费20铜板
一群人想要分一块金条，怎么分最省铜板。输入一个数组，返回分割的最小代价*/
#include"../util/util.h"
#include<queue>
#include<iostream>
using namespace std;
int lessMoneySplitGold(const int* arr,int length){
    //小根堆
    priority_queue<int,vector<int>,greater<int>> LQueue;
    for(int i =0;i<length;i++){
        LQueue.push(arr[i]);
    }
    int sum =0;
    int res =0;
    while(LQueue.size()>1){
        sum = LQueue.top()+LQueue.top();
        res +=sum;
        LQueue.push(sum);
    }
    return sum;
}
int main(){
    int arr[1024]={0};
    int arrLength = Util::GetInstance().getArrFromStdin(arr);
    int res = lessMoneySplitGold(arr,arrLength);
    cout<<res<<endl;
}